knitr::opts_chunk$set(echo = FALSE)

About the company

In 2016, Cyclistic launched a successful bike-share oering. Since then, the program has grown to a eet of 5,824 bicycles that are geotracked and locked into a network of 692 stations across Chicago. The bikes can be unlocked from one station and returned to any other station in the system anytime. Until now, Cyclistic’s marketing strategy relied on building general awareness and appealing to broad consumer segments. One approach that helped make these things possible was the flexibility of its pricing plans: single-ride passes, full-day passes, and annual memberships. Customers who purchase single-ride or full-day passes are referred to as casual riders. Customers who purchase annual memberships are Cyclistic members.

ASK

The main purpose of this analysis is to found out how annual Members of Cyclistic bike uses differ from the Casual Riders. First lets define a casual Rider. A casual user is a user that does not possesses an annual membership and only uses Cyclistic bikes in a full-day or single-ride pass. This are some of the questions we are trying to answer

- How do annual members and casual riders use Cyclistic bikes differently?

Prepare

The data is collected from Divvy-trip. Data is provided and collected by Divvy-trip and is open source for. The data is current and for this we will use the last 12 months of data. From April 2024 to March 2025 each month is in on a CSV file.

## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## 
## Attaching package: 'janitor'
## 
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
##            ride_id rideable_type          started_at            ended_at
## 1 743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2 BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 3 D47BBDDE7C40DD61  classic_bike 2024-04-20 11:13:13 2024-04-20 11:29:31
## 4 6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 5 CA9EFC0D24C24A27 electric_bike 2024-04-19 19:30:20 2024-04-19 20:07:42
## 6 AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
##           start_station_name start_station_id               end_station_name
## 1 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 2 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 3 Sheridan Rd & Montrose Ave     TA1307000107 Ashland Ave & Belle Plaine Ave
## 4 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 5 Sheridan Rd & Montrose Ave     TA1307000107   Stetson Ave & South Water St
## 6 Aberdeen St & Jackson Blvd            13157       Loomis St & Lexington St
##   end_station_id start_lat start_lng  end_lat   end_lng member_casual
## 1          15539  41.87773 -87.65479 41.87812 -87.64395        member
## 2          15539  41.87772 -87.65496 41.87812 -87.64395        member
## 3          13249  41.96167 -87.65464 41.95606 -87.66884        member
## 4          15539  41.87773 -87.65479 41.87812 -87.64395        member
## 5   TA1308000029  41.96161 -87.65461 41.88683 -87.62232        member
## 6          13332  41.87773 -87.65479 41.87223 -87.66136        member
##    ride_id          rideable_type       started_at          ended_at        
##  Length:5779568     Length:5779568     Length:5779568     Length:5779568    
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  start_station_name start_station_id   end_station_name   end_station_id    
##  Length:5779568     Length:5779568     Length:5779568     Length:5779568    
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##    start_lat       start_lng         end_lat         end_lng       
##  Min.   :41.64   Min.   :-87.91   Min.   :16.06   Min.   :-144.05  
##  1st Qu.:41.88   1st Qu.:-87.66   1st Qu.:41.88   1st Qu.: -87.66  
##  Median :41.90   Median :-87.64   Median :41.90   Median : -87.64  
##  Mean   :41.90   Mean   :-87.65   Mean   :41.90   Mean   : -87.65  
##  3rd Qu.:41.93   3rd Qu.:-87.63   3rd Qu.:41.93   3rd Qu.: -87.63  
##  Max.   :42.07   Max.   :-87.52   Max.   :87.96   Max.   : 152.53  
##                                   NA's   :6589    NA's   :6589     
##  member_casual     
##  Length:5779568    
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
##         n
## 1 5779568
##         n
## 1 5772979
##            ride_id rideable_type          started_at            ended_at
## 1 743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2 BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 3 D47BBDDE7C40DD61  classic_bike 2024-04-20 11:13:13 2024-04-20 11:29:31
## 4 6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 5 CA9EFC0D24C24A27 electric_bike 2024-04-19 19:30:20 2024-04-19 20:07:42
## 6 AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
##           start_station_name start_station_id               end_station_name
## 1 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 2 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 3 Sheridan Rd & Montrose Ave     TA1307000107 Ashland Ave & Belle Plaine Ave
## 4 Aberdeen St & Jackson Blvd            13157   Desplaines St & Jackson Blvd
## 5 Sheridan Rd & Montrose Ave     TA1307000107   Stetson Ave & South Water St
## 6 Aberdeen St & Jackson Blvd            13157       Loomis St & Lexington St
##   end_station_id start_lat start_lng  end_lat   end_lng member_casual
## 1          15539  41.87773 -87.65479 41.87812 -87.64395        member
## 2          15539  41.87772 -87.65496 41.87812 -87.64395        member
## 3          13249  41.96167 -87.65464 41.95606 -87.66884        member
## 4          15539  41.87773 -87.65479 41.87812 -87.64395        member
## 5   TA1308000029  41.96161 -87.65461 41.88683 -87.62232        member
## 6          13332  41.87773 -87.65479 41.87223 -87.66136        member
## Warning: NAs introduced by coercion
## Warning: NAs introduced by coercion
##  [1] "ride_id"            "rideable_type"      "started_at"        
##  [4] "ended_at"           "start_station_name" "start_station_id"  
##  [7] "end_station_name"   "end_station_id"     "start_lat"         
## [10] "start_lng"          "end_lat"            "end_lng"           
## [13] "member_casual"
##             ride_id rideable_type          started_at            ended_at
## 1  743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2  BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 4  6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 6  AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
## 20 3343C607757067B2 electric_bike 2024-04-16 18:14:23 2024-04-16 18:21:24
## 26 27F37997E1413F1C  classic_bike 2024-04-16 09:34:09 2024-04-16 10:01:44
##             start_station_name start_station_id             end_station_name
## 1   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 2   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 4   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 6   Aberdeen St & Jackson Blvd            13157     Loomis St & Lexington St
## 20 Desplaines St & Randolph St            15535      Aberdeen St & Monroe St
## 26     Damen Ave & Cortland St            13133    Michigan Ave & Madison St
##    end_station_id start_lat start_lng  end_lat   end_lng member_casual
## 1           15539  41.87773 -87.65479 41.87812 -87.64395        member
## 2           15539  41.87772 -87.65496 41.87812 -87.64395        member
## 4           15539  41.87773 -87.65479 41.87812 -87.64395        member
## 6           13332  41.87773 -87.65479 41.87223 -87.66136        member
## 20          13156  41.88353 -87.64425 41.88042 -87.65552        member
## 26          13036  41.91598 -87.67733 41.88213 -87.62512        member
##    ride_length
## 1          275
## 2          177
## 4          226
## 6          308
## 20         421
## 26        1655
##  [1] "ride_id"            "rideable_type"      "started_at"        
##  [4] "ended_at"           "start_station_name" "start_station_id"  
##  [7] "end_station_name"   "end_station_id"     "start_lat"         
## [10] "start_lng"          "end_lat"            "end_lng"           
## [13] "member_casual"      "ride_length"
##             ride_id rideable_type          started_at            ended_at
## 1  743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2  BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 4  6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 6  AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
## 20 3343C607757067B2 electric_bike 2024-04-16 18:14:23 2024-04-16 18:21:24
## 26 27F37997E1413F1C  classic_bike 2024-04-16 09:34:09 2024-04-16 10:01:44
##             start_station_name start_station_id             end_station_name
## 1   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 2   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 4   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 6   Aberdeen St & Jackson Blvd            13157     Loomis St & Lexington St
## 20 Desplaines St & Randolph St            15535      Aberdeen St & Monroe St
## 26     Damen Ave & Cortland St            13133    Michigan Ave & Madison St
##    end_station_id start_lat start_lng  end_lat   end_lng member_casual
## 1           15539  41.87773 -87.65479 41.87812 -87.64395        member
## 2           15539  41.87772 -87.65496 41.87812 -87.64395        member
## 4           15539  41.87773 -87.65479 41.87812 -87.64395        member
## 6           13332  41.87773 -87.65479 41.87223 -87.66136        member
## 20          13156  41.88353 -87.64425 41.88042 -87.65552        member
## 26          13036  41.91598 -87.67733 41.88213 -87.62512        member
##    ride_length day_of_week weekday
## 1          275           2       2
## 2          177           5       5
## 4          226           5       5
## 6          308           4       4
## 20         421           3       3
## 26        1655           3       3
## 'data.frame':    965421 obs. of  16 variables:
##  $ ride_id           : chr  "743252713F32516B" "BE90D33D2240C614" "6684E760BF9EA9B5" "AA64319F52336324" ...
##  $ rideable_type     : chr  "classic_bike" "electric_bike" "classic_bike" "classic_bike" ...
##  $ started_at        : chr  "2024-04-22 19:08:21" "2024-04-11 06:19:24" "2024-04-04 18:39:20" "2024-04-10 16:27:08" ...
##  $ ended_at          : chr  "2024-04-22 19:12:56" "2024-04-11 06:22:21" "2024-04-04 18:43:06" "2024-04-10 16:32:16" ...
##  $ start_station_name: chr  "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" ...
##  $ start_station_id  : num  13157 13157 13157 13157 15535 ...
##  $ end_station_name  : chr  "Desplaines St & Jackson Blvd" "Desplaines St & Jackson Blvd" "Desplaines St & Jackson Blvd" "Loomis St & Lexington St" ...
##  $ end_station_id    : num  15539 15539 15539 13332 13156 ...
##  $ start_lat         : num  41.9 41.9 41.9 41.9 41.9 ...
##  $ start_lng         : num  -87.7 -87.7 -87.7 -87.7 -87.6 ...
##  $ end_lat           : num  41.9 41.9 41.9 41.9 41.9 ...
##  $ end_lng           : num  -87.6 -87.6 -87.6 -87.7 -87.7 ...
##  $ member_casual     : chr  "member" "member" "member" "member" ...
##  $ ride_length       : num  275 177 226 308 421 ...
##  $ day_of_week       : num  2 5 5 4 3 3 2 5 7 5 ...
##  $ weekday           : num  2 5 5 4 3 3 2 5 7 5 ...
##  - attr(*, "na.action")= 'omit' Named int [1:4807558] 3 5 7 8 9 10 11 12 13 14 ...
##   ..- attr(*, "names")= chr [1:4807558] "3" "5" "7" "8" ...
## 'data.frame':    965421 obs. of  12 variables:
##  $ ride_id           : chr  "743252713F32516B" "BE90D33D2240C614" "6684E760BF9EA9B5" "AA64319F52336324" ...
##  $ rideable_type     : chr  "classic_bike" "electric_bike" "classic_bike" "classic_bike" ...
##  $ started_at        : chr  "2024-04-22 19:08:21" "2024-04-11 06:19:24" "2024-04-04 18:39:20" "2024-04-10 16:27:08" ...
##  $ ended_at          : chr  "2024-04-22 19:12:56" "2024-04-11 06:22:21" "2024-04-04 18:43:06" "2024-04-10 16:32:16" ...
##  $ start_station_name: chr  "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" "Aberdeen St & Jackson Blvd" ...
##  $ start_station_id  : num  13157 13157 13157 13157 15535 ...
##  $ end_station_name  : chr  "Desplaines St & Jackson Blvd" "Desplaines St & Jackson Blvd" "Desplaines St & Jackson Blvd" "Loomis St & Lexington St" ...
##  $ end_station_id    : num  15539 15539 15539 13332 13156 ...
##  $ member_casual     : chr  "member" "member" "member" "member" ...
##  $ ride_length       : num  275 177 226 308 421 ...
##  $ day_of_week       : num  2 5 5 4 3 3 2 5 7 5 ...
##  $ weekday           : num  2 5 5 4 3 3 2 5 7 5 ...
##  - attr(*, "na.action")= 'omit' Named int [1:4807558] 3 5 7 8 9 10 11 12 13 14 ...
##   ..- attr(*, "names")= chr [1:4807558] "3" "5" "7" "8" ...
##            ride_id      rideable_type         started_at           ended_at 
##                  0                  0                  0                  0 
## start_station_name   start_station_id   end_station_name     end_station_id 
##                  0                  0                  0                  0 
##      member_casual        ride_length        day_of_week            weekday 
##                  0                  0                  0                  0
## 
## casual member 
## 406880 558541
##             ride_id rideable_type          started_at            ended_at
## 1  743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2  BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 4  6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 6  AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
## 20 3343C607757067B2 electric_bike 2024-04-16 18:14:23 2024-04-16 18:21:24
## 26 27F37997E1413F1C  classic_bike 2024-04-16 09:34:09 2024-04-16 10:01:44
##             start_station_name start_station_id             end_station_name
## 1   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 2   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 4   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 6   Aberdeen St & Jackson Blvd            13157     Loomis St & Lexington St
## 20 Desplaines St & Randolph St            15535      Aberdeen St & Monroe St
## 26     Damen Ave & Cortland St            13133    Michigan Ave & Madison St
##    end_station_id member_casual ride_length day_of_week weekday       date
## 1           15539        member         275           2       2 2024-04-22
## 2           15539        member         177           5       5 2024-04-11
## 4           15539        member         226           5       5 2024-04-04
## 6           13332        member         308           4       4 2024-04-10
## 20          13156        member         421           3       3 2024-04-16
## 26          13036        member        1655           3       3 2024-04-16
##    month day year
## 1     04  22 2024
## 2     04  11 2024
## 4     04  04 2024
## 6     04  10 2024
## 20    04  16 2024
## 26    04  16 2024
## [1] TRUE
##    ride_id          rideable_type       started_at          ended_at        
##  Length:965410      Length:965410      Length:965410      Length:965410     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  start_station_name start_station_id  end_station_name   end_station_id   
##  Length:965410      Min.   :     20   Length:965410      Min.   :     20  
##  Class :character   1st Qu.:  13042   Class :character   1st Qu.:  13042  
##  Mode  :character   Median :  13196   Mode  :character   Median :  13196  
##                     Mean   :  13434                      Mean   :  13588  
##                     3rd Qu.:  13420                      3rd Qu.:  13409  
##                     Max.   :1524189                      Max.   :1524189  
##  member_casual       ride_length       day_of_week      weekday    
##  Length:965410      Min.   :    0.0   Min.   :1.00   Min.   :1.00  
##  Class :character   1st Qu.:  355.3   1st Qu.:2.00   1st Qu.:2.00  
##  Mode  :character   Median :  662.2   Median :4.00   Median :4.00  
##                     Mean   : 1116.1   Mean   :4.11   Mean   :4.11  
##                     3rd Qu.: 1238.4   3rd Qu.:6.00   3rd Qu.:6.00  
##                     Max.   :89906.1   Max.   :7.00   Max.   :7.00  
##       date               month               day                year          
##  Min.   :2024-04-01   Length:965410      Length:965410      Length:965410     
##  1st Qu.:2024-06-18   Class :character   Class :character   Class :character  
##  Median :2024-08-14   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :2024-08-23                                                           
##  3rd Qu.:2024-10-12                                                           
##  Max.   :2025-03-31
## [1] 1116.124
## [1] 662.226
## [1] 89906.09
## [1] 0
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0   355.3   662.2  1116.1  1238.4 89906.1
##   bike_usage_df_v2$member_casual bike_usage_df_v2$ride_length
## 1                         casual                    1584.2170
## 2                         member                     775.1349
##   bike_usage_df_v2$member_casual bike_usage_df_v2$ride_length
## 1                         casual                     893.4210
## 2                         member                     550.5615
##   bike_usage_df_v2$member_casual bike_usage_df_v2$ride_length
## 1                         casual                     89906.09
## 2                         member                     89546.61
##   bike_usage_df_v2$member_casual bike_usage_df_v2$ride_length
## 1                         casual                            0
## 2                         member                            0
##    bike_usage_df_v2$member_casual bike_usage_df_v2$day_of_week
## 1                          casual                            1
## 2                          member                            1
## 3                          casual                            2
## 4                          member                            2
## 5                          casual                            3
## 6                          member                            3
## 7                          casual                            4
## 8                          member                            4
## 9                          casual                            5
## 10                         member                            5
## 11                         casual                            6
## 12                         member                            6
## 13                         casual                            7
## 14                         member                            7
##    bike_usage_df_v2$ride_length
## 1                     1785.3707
## 2                      874.1751
## 3                     1543.3948
## 4                      736.9492
## 5                     1388.5966
## 6                      737.6687
## 7                     1441.1664
## 8                      746.3908
## 9                     1393.1090
## 10                     740.3294
## 11                    1528.4687
## 12                     761.4890
## 13                    1756.4773
## 14                     863.7988
## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.
## # A tibble: 14 × 4
## # Groups:   member_casual [2]
##    member_casual day_of_week number_of_rides average_duration
##    <chr>               <dbl>           <int>            <dbl>
##  1 casual                  1           72260            1785.
##  2 casual                  2           48922            1543.
##  3 casual                  3           41746            1389.
##  4 casual                  4           47458            1441.
##  5 casual                  5           47332            1393.
##  6 casual                  6           62415            1528.
##  7 casual                  7           86741            1756.
##  8 member                  1           63487             874.
##  9 member                  2           81633             737.
## 10 member                  3           84825             738.
## 11 member                  4           89264             746.
## 12 member                  5           84691             740.
## 13 member                  6           80047             761.
## 14 member                  7           74589             864.
##             ride_id rideable_type          started_at            ended_at
## 1  743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2  BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 4  6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 6  AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
## 20 3343C607757067B2 electric_bike 2024-04-16 18:14:23 2024-04-16 18:21:24
## 26 27F37997E1413F1C  classic_bike 2024-04-16 09:34:09 2024-04-16 10:01:44
##             start_station_name start_station_id             end_station_name
## 1   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 2   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 4   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 6   Aberdeen St & Jackson Blvd            13157     Loomis St & Lexington St
## 20 Desplaines St & Randolph St            15535      Aberdeen St & Monroe St
## 26     Damen Ave & Cortland St            13133    Michigan Ave & Madison St
##    end_station_id member_casual ride_length day_of_week weekday       date
## 1           15539        member         275      Monday       2 2024-04-22
## 2           15539        member         177    Thursday       5 2024-04-11
## 4           15539        member         226    Thursday       5 2024-04-04
## 6           13332        member         308   Wednesday       4 2024-04-10
## 20          13156        member         421     Tuesday       3 2024-04-16
## 26          13036        member        1655     Tuesday       3 2024-04-16
##    month day year month_abbr
## 1     04  22 2024     Apr 24
## 2     04  11 2024     Apr 24
## 4     04  04 2024     Apr 24
## 6     04  10 2024     Apr 24
## 20    04  16 2024     Apr 24
## 26    04  16 2024     Apr 24
## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

##             ride_id rideable_type          started_at            ended_at
## 1  743252713F32516B  classic_bike 2024-04-22 19:08:21 2024-04-22 19:12:56
## 2  BE90D33D2240C614 electric_bike 2024-04-11 06:19:24 2024-04-11 06:22:21
## 4  6684E760BF9EA9B5  classic_bike 2024-04-04 18:39:20 2024-04-04 18:43:06
## 6  AA64319F52336324  classic_bike 2024-04-10 16:27:08 2024-04-10 16:32:16
## 20 3343C607757067B2 electric_bike 2024-04-16 18:14:23 2024-04-16 18:21:24
## 26 27F37997E1413F1C  classic_bike 2024-04-16 09:34:09 2024-04-16 10:01:44
##             start_station_name start_station_id             end_station_name
## 1   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 2   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 4   Aberdeen St & Jackson Blvd            13157 Desplaines St & Jackson Blvd
## 6   Aberdeen St & Jackson Blvd            13157     Loomis St & Lexington St
## 20 Desplaines St & Randolph St            15535      Aberdeen St & Monroe St
## 26     Damen Ave & Cortland St            13133    Michigan Ave & Madison St
##    end_station_id member_casual ride_length day_of_week weekday       date
## 1           15539        member         275      Monday       2 2024-04-22
## 2           15539        member         177    Thursday       5 2024-04-11
## 4           15539        member         226    Thursday       5 2024-04-04
## 6           13332        member         308   Wednesday       4 2024-04-10
## 20          13156        member         421     Tuesday       3 2024-04-16
## 26          13036        member        1655     Tuesday       3 2024-04-16
##    month day year month_abbr
## 1     04  22 2024     Apr 24
## 2     04  11 2024     Apr 24
## 4     04  04 2024     Apr 24
## 6     04  10 2024     Apr 24
## 20    04  16 2024     Apr 24
## 26    04  16 2024     Apr 24
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: The following aesthetics were dropped during statistical transformation: fill.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

### Find IQR and outliers of ride_length

## [1] 75402    17

It is reasonable to assume that bikes will be returned daily, so we’re limiting ride length to 10 hours max and and 5 minutes minimum

10 hours thats assuming that they had a 8 hour day work. 1 hour of travel + 1 hour or extra curriculum activities (example (gym, food, etc))

####Looking at boxplot after removal of bad records to see distribution of values

## 'data.frame':    0 obs. of  17 variables:
##  $ ride_id           : chr 
##  $ rideable_type     : chr 
##  $ started_at        : chr 
##  $ ended_at          : chr 
##  $ start_station_name: chr 
##  $ start_station_id  : num 
##  $ end_station_name  : chr 
##  $ end_station_id    : num 
##  $ member_casual     : chr 
##  $ ride_length       : num 
##  $ day_of_week       : Ord.factor w/ 7 levels "Sunday"<"Monday"<..: 
##  $ weekday           : num 
##  $ date              : 'Date' num(0) 
##  $ month             : chr 
##  $ day               : chr 
##  $ year              : chr 
##  $ month_abbr        : chr 
##  - attr(*, "na.action")= 'omit' Named int [1:4807558] 3 5 7 8 9 10 11 12 13 14 ...
##   ..- attr(*, "names")= chr [1:4807558] "3" "5" "7" "8" ...

Aggregate rideable_type by month

Create a vector with the desired month order

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

## `summarise()` has grouped output by 'rideable_type', 'weekday'. You can
## override using the `.groups` argument.

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.
## # A tibble: 6 × 5
## # Groups:   member_casual [1]
##   member_casual day_of_week number_of_rides average_ride_duration median
##   <chr>         <ord>                 <int>                 <dbl>  <dbl>
## 1 member        Wednesday             48935                  330.   327 
## 2 member        Tuesday               47341                  330.   326 
## 3 member        Thursday              46812                  330.   327.
## 4 member        Monday                45750                  328.   323.
## 5 member        Friday                43600                  329.   327.
## 6 member        Saturday              36772                  330.   330.

### Summary stats for member_casual riders

## # A tibble: 2 × 5
##   member_casual total_rides percentage avg_ride_length median
##   <chr>               <int>      <dbl>           <dbl>  <dbl>
## 1 casual             137385       31.4            338.   351.
## 2 member             300559       68.6            330.   327.

Summary stats for rideable_type for Q1

## # A tibble: 3 × 5
##   rideable_type    total_rides percentage avg_ride_length median
##   <chr>                  <int>      <dbl>           <dbl>  <dbl>
## 1 classic_bike          231692      52.9             337.   337.
## 2 electric_bike         198922      45.4             328.   331.
## 3 electric_scooter        7330       1.67            315.   308.

Summarizing rideable_type by weekday

## `summarise()` has grouped output by 'rideable_type', 'day_of_week'. You can
## override using the `.groups` argument.
## # A tibble: 10 × 8
## # Groups:   rideable_type, day_of_week [10]
##    rideable_type day_of_week member_casual number_of_rides average_ride_duration
##    <chr>         <ord>       <chr>                   <int>                 <dbl>
##  1 classic_bike  Wednesday   member                  27330                  330.
##  2 classic_bike  Tuesday     member                  26448                  330.
##  3 classic_bike  Thursday    member                  25920                  330.
##  4 classic_bike  Monday      member                  25522                  327.
##  5 classic_bike  Friday      member                  23928                  330.
##  6 electric_bike Wednesday   member                  20966                  331.
##  7 classic_bike  Saturday    member                  20955                  335.
##  8 electric_bike Tuesday     member                  20324                  330.
##  9 electric_bike Thursday    member                  20308                  331.
## 10 electric_bike Monday      member                  19644                  331.
## # ℹ 3 more variables: median <dbl>, max <dbl>, min <dbl>

### Aggregate rideable_type by member_casual by day of week

## `summarise()` has grouped output by 'rideable_type', 'member_casual'. You can
## override using the `.groups` argument.

Aggregate member_casual by month for last 12 months

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

### Aggregate member_casual by rideable_type by weekday

## `summarise()` has grouped output by 'member_casual', 'rideable_type'. You can
## override using the `.groups` argument.

Looking at top stations summary

## `summarise()` has grouped output by 'start_station_name'. You can override
## using the `.groups` argument.

## List of 136
##  $ line                            :List of 6
##   ..$ colour       : chr "black"
##   ..$ linewidth    : num 0.5
##   ..$ linetype     : num 1
##   ..$ lineend      : chr "butt"
##   ..$ arrow        : logi FALSE
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_line" "element"
##  $ rect                            :List of 5
##   ..$ fill         : chr "white"
##   ..$ colour       : chr "black"
##   ..$ linewidth    : num 0.5
##   ..$ linetype     : num 1
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_rect" "element"
##  $ text                            :List of 11
##   ..$ family       : chr ""
##   ..$ face         : chr "plain"
##   ..$ colour       : chr "black"
##   ..$ size         : num 11
##   ..$ hjust        : num 0.5
##   ..$ vjust        : num 0.5
##   ..$ angle        : num 0
##   ..$ lineheight   : num 0.9
##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : logi FALSE
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ title                           : NULL
##  $ aspect.ratio                    : NULL
##  $ axis.title                      : NULL
##  $ axis.title.x                    :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : NULL
##   ..$ vjust        : num 1
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 2.75points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.title.x.top                :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : NULL
##   ..$ vjust        : num 0
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 0points 2.75points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.title.x.bottom             : NULL
##  $ axis.title.y                    :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : NULL
##   ..$ vjust        : num 1
##   ..$ angle        : num 90
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 2.75points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.title.y.left               : NULL
##  $ axis.title.y.right              :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : NULL
##   ..$ vjust        : num 1
##   ..$ angle        : num -90
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.75points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text                       :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : chr "grey30"
##   ..$ size         : 'rel' num 0.8
##   ..$ hjust        : NULL
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text.x                     :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 1
##   ..$ vjust        : num 0.5
##   ..$ angle        : num 90
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 2.2points 0points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi FALSE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text.x.top                 :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : NULL
##   ..$ vjust        : num 0
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 0points 2.2points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text.x.bottom              : NULL
##  $ axis.text.y                     :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 1
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 2.2points 0points 0points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text.y.left                : NULL
##  $ axis.text.y.right               :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.2points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.text.theta                 : NULL
##  $ axis.text.r                     :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0.5
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : 'margin' num [1:4] 0points 2.2points 0points 2.2points
##   .. ..- attr(*, "unit")= int 8
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ axis.ticks                      : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ axis.ticks.x                    : NULL
##  $ axis.ticks.x.top                : NULL
##  $ axis.ticks.x.bottom             : NULL
##  $ axis.ticks.y                    : NULL
##  $ axis.ticks.y.left               : NULL
##  $ axis.ticks.y.right              : NULL
##  $ axis.ticks.theta                : NULL
##  $ axis.ticks.r                    : NULL
##  $ axis.minor.ticks.x.top          : NULL
##  $ axis.minor.ticks.x.bottom       : NULL
##  $ axis.minor.ticks.y.left         : NULL
##  $ axis.minor.ticks.y.right        : NULL
##  $ axis.minor.ticks.theta          : NULL
##  $ axis.minor.ticks.r              : NULL
##  $ axis.ticks.length               : 'simpleUnit' num 2.75points
##   ..- attr(*, "unit")= int 8
##  $ axis.ticks.length.x             : NULL
##  $ axis.ticks.length.x.top         : NULL
##  $ axis.ticks.length.x.bottom      : NULL
##  $ axis.ticks.length.y             : NULL
##  $ axis.ticks.length.y.left        : NULL
##  $ axis.ticks.length.y.right       : NULL
##  $ axis.ticks.length.theta         : NULL
##  $ axis.ticks.length.r             : NULL
##  $ axis.minor.ticks.length         : 'rel' num 0.75
##  $ axis.minor.ticks.length.x       : NULL
##  $ axis.minor.ticks.length.x.top   : NULL
##  $ axis.minor.ticks.length.x.bottom: NULL
##  $ axis.minor.ticks.length.y       : NULL
##  $ axis.minor.ticks.length.y.left  : NULL
##  $ axis.minor.ticks.length.y.right : NULL
##  $ axis.minor.ticks.length.theta   : NULL
##  $ axis.minor.ticks.length.r       : NULL
##  $ axis.line                       : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ axis.line.x                     : NULL
##  $ axis.line.x.top                 : NULL
##  $ axis.line.x.bottom              : NULL
##  $ axis.line.y                     : NULL
##  $ axis.line.y.left                : NULL
##  $ axis.line.y.right               : NULL
##  $ axis.line.theta                 : NULL
##  $ axis.line.r                     : NULL
##  $ legend.background               : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ legend.margin                   : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
##   ..- attr(*, "unit")= int 8
##  $ legend.spacing                  : 'simpleUnit' num 11points
##   ..- attr(*, "unit")= int 8
##  $ legend.spacing.x                : NULL
##  $ legend.spacing.y                : NULL
##  $ legend.key                      : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ legend.key.size                 : 'simpleUnit' num 1.2lines
##   ..- attr(*, "unit")= int 3
##  $ legend.key.height               : NULL
##  $ legend.key.width                : NULL
##  $ legend.key.spacing              : 'simpleUnit' num 5.5points
##   ..- attr(*, "unit")= int 8
##  $ legend.key.spacing.x            : NULL
##  $ legend.key.spacing.y            : NULL
##  $ legend.frame                    : NULL
##  $ legend.ticks                    : NULL
##  $ legend.ticks.length             : 'rel' num 0.2
##  $ legend.axis.line                : NULL
##  $ legend.text                     :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : 'rel' num 0.8
##   ..$ hjust        : NULL
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ legend.text.position            : NULL
##  $ legend.title                    :List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi TRUE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  $ legend.title.position           : NULL
##  $ legend.position                 : chr "right"
##  $ legend.position.inside          : NULL
##  $ legend.direction                : NULL
##  $ legend.byrow                    : NULL
##  $ legend.justification            : chr "center"
##  $ legend.justification.top        : NULL
##  $ legend.justification.bottom     : NULL
##  $ legend.justification.left       : NULL
##  $ legend.justification.right      : NULL
##  $ legend.justification.inside     : NULL
##  $ legend.location                 : NULL
##  $ legend.box                      : NULL
##  $ legend.box.just                 : NULL
##  $ legend.box.margin               : 'margin' num [1:4] 0cm 0cm 0cm 0cm
##   ..- attr(*, "unit")= int 1
##  $ legend.box.background           : list()
##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
##  $ legend.box.spacing              : 'simpleUnit' num 11points
##   ..- attr(*, "unit")= int 8
##   [list output truncated]
##  - attr(*, "class")= chr [1:2] "theme" "gg"
##  - attr(*, "complete")= logi TRUE
##  - attr(*, "validate")= logi TRUE

Looking at top stations summary for Casual Users in the last Year

looks like september is the most busy month for casual users

## `summarise()` has grouped output by 'start_station_name', 'member_casual',
## 'rideable_type'. You can override using the `.groups` argument.

### Looking at top stations summary for Member Users in the last Year looks like september is the most busy month for casual users

## `summarise()` has grouped output by 'start_station_name', 'member_casual',
## 'rideable_type'. You can override using the `.groups` argument.

Looking at top stations summary for the last Year

## `summarise()` has grouped output by 'start_station_name', 'member_casual',
## 'rideable_type'. You can override using the `.groups` argument.

## `summarise()` has grouped output by 'start_station_name', 'rideable_type'. You
## can override using the `.groups` argument.

### ussage of rideable type in the top 600 stations

## `summarise()` has grouped output by 'start_station_name', 'rideable_type'. You
## can override using the `.groups` argument.

### ussage of rideable type in the top 100 stations

## `summarise()` has grouped output by 'start_station_name', 'rideable_type'. You
## can override using the `.groups` argument.

### top 10 stations

## `summarise()` has grouped output by 'start_station_name', 'member_casual'. You
## can override using the `.groups` argument.
## Selecting by total_count
## # A tibble: 15 × 4
##    start_station_name                member_casual rideable_type total_count
##    <chr>                             <chr>         <chr>               <int>
##  1 State St & 33rd St                member        classic_bike         4644
##  2 Calumet Ave & 33rd St             member        classic_bike         3947
##  3 Streeter Dr & Grand Ave           casual        classic_bike         2914
##  4 Aberdeen St & Jackson Blvd        member        classic_bike         2876
##  5 Loomis St & Lexington St          member        classic_bike         2604
##  6 Peoria St & Jackson Blvd          member        classic_bike         2586
##  7 Broadway & Waveland Ave           member        classic_bike         2445
##  8 State St & 33rd St                member        electric_bike        2267
##  9 DuSable Lake Shore Dr & Monroe St casual        classic_bike         2265
## 10 Ashland Ave & Division St         member        classic_bike         2165
## 11 Clinton St & Jackson Blvd         member        electric_bike        2132
## 12 Canal St & Madison St             member        electric_bike        2129
## 13 State St & Chicago Ave            member        classic_bike         2072
## 14 Clinton St & Lake St              member        classic_bike         2069
## 15 Clinton St & Lake St              member        electric_bike        2019

top 15 stations for Casual riders

## `summarise()` has grouped output by 'start_station_name', 'member_casual'. You
## can override using the `.groups` argument.
## Selecting by total_count
## # A tibble: 10 × 4
##    start_station_name                member_casual rideable_type total_count
##    <chr>                             <chr>         <chr>               <int>
##  1 Streeter Dr & Grand Ave           casual        classic_bike         2914
##  2 DuSable Lake Shore Dr & Monroe St casual        classic_bike         2265
##  3 Shedd Aquarium                    casual        classic_bike         1576
##  4 Millennium Park                   casual        classic_bike         1401
##  5 Streeter Dr & Grand Ave           casual        electric_bike        1298
##  6 DuSable Lake Shore Dr & Monroe St casual        electric_bike        1159
##  7 Michigan Ave & Oak St             casual        classic_bike         1096
##  8 Michigan Ave & 8th St             casual        classic_bike         1021
##  9 Aberdeen St & Jackson Blvd        casual        classic_bike          927
## 10 Adler Planetarium                 casual        classic_bike          890

Share

### Total rides by rideable_type ### Total rides by rideable_type by member type for the last 12 Months ### Top 15 Stations for Casual Riders

## Warning in geom_col(mapping = aes(x = start_station_name, y = total_count, :
## Ignoring unknown aesthetics: order_by

Aggregate member_casual by rideable_type by weekday

### Aggreagate member_casual by rideable type my week

## `summarise()` has grouped output by 'member_casual', 'rideable_type'. You can
## override using the `.groups` argument.

### Ride Length by Day of Week

Start Time by Week days

## `summarise()` has grouped output by 'start_hour', 'day_of_week'. You can
## override using the `.groups` argument.
## Warning in geom_point(linewidth = 3, alpha = 0.4): Ignoring unknown parameters:
## `linewidth`
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

## `summarise()` has grouped output by 'start_station_name', 'end_station_name',
## 'member_casual', 'day_of_week'. You can override using the `.groups` argument.
## Selecting by route_count
## # A tibble: 104 × 6
##    start_station_name      end_station_name member_casual day_of_week start_hour
##    <chr>                   <chr>            <chr>         <ord>            <int>
##  1 State St & 33rd St      Calumet Ave & 3… member        Tuesday             15
##  2 State St & 33rd St      Calumet Ave & 3… member        Thursday            15
##  3 State St & 33rd St      Calumet Ave & 3… member        Wednesday           13
##  4 State St & 33rd St      Calumet Ave & 3… member        Tuesday             11
##  5 Streeter Dr & Grand Ave Streeter Dr & G… casual        Saturday            16
##  6 Calumet Ave & 33rd St   State St & 33rd… member        Wednesday           13
##  7 State St & 33rd St      Calumet Ave & 3… member        Tuesday             16
##  8 State St & 33rd St      Calumet Ave & 3… member        Wednesday           12
##  9 State St & 33rd St      Calumet Ave & 3… member        Monday              16
## 10 Calumet Ave & 33rd St   State St & 33rd… member        Monday              18
## # ℹ 94 more rows
## # ℹ 1 more variable: route_count <int>
## Warning in geom_point(linewidth = 3, alpha = 0.4): Ignoring unknown parameters:
## `linewidth`

### starting station for the longest rides

## `summarise()` has grouped output by 'ride_length', 'day_of_week',
## 'member_casual'. You can override using the `.groups` argument.
## # A tibble: 100 × 5
##    ride_length day_of_week member_casual rideable_type number_of_rides
##          <dbl> <ord>       <chr>         <chr>                   <int>
##  1         600 Friday      member        classic_bike               12
##  2         600 Tuesday     member        electric_bike               9
##  3         600 Thursday    member        electric_bike               8
##  4         600 Wednesday   member        classic_bike                7
##  5         600 Thursday    member        classic_bike                7
##  6         600 Friday      member        electric_bike               7
##  7         600 Saturday    casual        classic_bike                7
##  8         600 Sunday      member        classic_bike                6
##  9         600 Tuesday     member        classic_bike                6
## 10         600 Monday      member        electric_bike               5
## # ℹ 90 more rows

Summary

  • Classic Bikes are more popular than electric bikes, but there is a growing number of casual rides that are choosing electric during the workweek
  • Member busy season is starts in March and last though November; this observation is also true for Casual Riders
  • For Member and Casual riders the rides start to pick up every weekday at 5:00 AM and drops off at 8:00 PM.
  • The Top 10 Stations for Casual rides do not coincide with the Members stations. See list Below.
## # A tibble: 10 × 1
##    start_station_name               
##    <chr>                            
##  1 Streeter Dr & Grand Ave          
##  2 DuSable Lake Shore Dr & Monroe St
##  3 Shedd Aquarium                   
##  4 Millennium Park                  
##  5 Streeter Dr & Grand Ave          
##  6 DuSable Lake Shore Dr & Monroe St
##  7 Michigan Ave & Oak St            
##  8 Michigan Ave & 8th St            
##  9 Aberdeen St & Jackson Blvd       
## 10 Adler Planetarium
  • The most active days for Casual Users are Thursday, Friday, Saturday, and Sunday.
  • January is the most active month for electric scooters.
  • Casual riders are now 31 percent of the ridership while Member drop to 69%.

Act

  • Target the Top 10 stations with adds and events for converting Casual riders into Members.
  • Since Electric bikes are being used by Casual riders more often we can target Casual riders with incentives with a new Member account.
  • Promote membership drives in the months of April trough November.